package com.eedi.framework.mail.service;


import com.eedi.framework.mail.controller.sys.vo.template.MailTemplatePageReq;
import com.eedi.framework.mail.controller.sys.vo.template.MailTemplateSaveReq;
import com.eedi.framework.mail.dal.dataobject.SysMailTemplateDO;
import com.eedi.framework.common.pojo.PageResult;
import javax.validation.Valid;
import java.util.List;
import java.util.Map;

/**
 * 邮件模版 Service 接口
 *
 * @author zybourn
 * @since 2022-03-21
 */
public interface SysMailTemplateService {

    /**
     * 邮件模版创建
     *
     * @param createReqVO 邮件信息
     * @return 编号
     */
    String createMailTemplate(@Valid MailTemplateSaveReq createReqVO);

    /**
     * 邮件模版修改
     *
     * @param updateReqVO 邮件信息
     */
    void updateMailTemplate(@Valid MailTemplateSaveReq updateReqVO);

    /**
     * 邮件模版删除
     *
     * @param id 编号
     */
    void deleteMailTemplate(String id);

    /**
     * 获取邮件模版
     *
     * @param id 编号
     * @return 邮件模版
     */
    SysMailTemplateDO getMailTemplate(String id);

    /**
     * 获取邮件模版分页
     *
     * @param pageReqVO 模版信息
     * @return 邮件模版分页信息
     */
    PageResult<SysMailTemplateDO> getMailTemplatePage(MailTemplatePageReq pageReqVO);

    /**
     * 获取邮件模板数组
     *
     * @return 模版数组
     */
    List<SysMailTemplateDO> getMailTemplateList();

    /**
     * 从缓存中获取邮件模版
     *
     * @param code 模板编码
     * @return 邮件模板
     */
    SysMailTemplateDO getMailTemplateByCodeFromCache(String code);

    /**
     * 邮件模版内容合成
     *
     * @param content 邮件模版
     * @param params 合成参数
     * @return 格式化后的内容
     */
    String formatMailTemplateContent(String content, Map<String, Object> params);

    /**
     * 获得指定邮件账号下的邮件模板数量
     *
     * @param accountId 账号编号
     * @return 数量
     */
    long getMailTemplateCountByAccountId(String accountId);

}
